Public b8_flag As Integer = 0

    Dim startTime As DateTime
    Dim ts As TimeSpan

Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click

        Dim startDt As DateTime = DateTime.Now

        If b8_flag = 0 Then
            Button8.Text = "測定停止"

            With ToolStripStatusLabel1
                .Text = "測定中"
                .BackColor = Color.Yellow
            End With
            ToolStripStatusLabel2.Text = "測定時間:00:00:00"
            startTime = DateTime.Now
            Threading.Thread.Sleep(100)
            Timer2.Start()

            b8_flag = 1
        Else
            With ToolStripStatusLabel1
                .Text = "測定停止"
                .BackColor = SystemColors.Control
            End With

            sw.Stop()

            Timer2.Enabled = False
            'ToolStripStatusLabel2.Text = "測定時間:00:00:00"

            b8_flag = 0
        End If
    End Sub

    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        ToolStripStatusLabel2.Text = "測定時間:" & sw.Elapsed.Hours.ToString("00") & ":" & sw.Elapsed.Minutes.ToString("00") & ":" & sw.Elapsed.Seconds.ToString("00")
        ts = Now.Subtract(startTime)    ' 経過時間算出
        ToolStripStatusLabel4.Text = "経過時間:" & ts.TotalMinutes.ToString

        ts = DateTime.Now - startTime
        ToolStripStatusLabel4.Text = String.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds)

    End Sub

    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        Dim fc As Double = 9700
        Dim startF60, startF40, stopF40, stopF60 As Double
        Dim startF60dB, startF40dB, stopF40dB, stopF60dB As Double
        Dim t As Double = 22.994
        Dim tr As Double = 0.024

        'tr = Int(t / 10) * 10

        Dim db40width As Double = 7.6 / Math.Sqrt(t * 10 ^ -6 * tr * 10 ^ -6)

        Dim db60 As Double = -60

        Dim db60witdh As Double = db40width * 10 ^ (-(db60 + 40) / 10 / 3)

        startF60 = fc - (db60witdh*10 ^ -6) / 2
        stopF60 = fc + (db60witdh*10 ^ -6) / 2
        startF40 = fc - (db40width*10 ^ -6) / 2
        stopF40 = fc + (db40width*10 ^ -6) / 2

        startF60dB = -40 + -30*Math.Log10((fc - 9677) / (db40width*10 ^ -6 / 2))
        startF40dB = -40
        stopF40dB = -40
        stopF60dB = -40 + -30*Math.Log10((9723 - fc) / (db40width*10 ^ -6 / 2))

        MessageBox.Show("40dB帯域幅:" & db40width & vbCrLf &
            "60dB帯域幅:" & db60witdh & vbCrLf &
                        "startF60:" & startF60 & vbCrLf &
                        "startF40:" & startF40 & vbCrLf &
                        "stopF40:" & stopF40 & vbCrLf &
                        "stopF60:" & stopF60 & vbCrLf &
                        "startF60の振幅:" & startF60dB & vbCrLf &
                        "startF60の振幅:" & startF40dB & vbCrLf &
                        "startF60の振幅:" & stopF40dB & vbCrLf &
                        "startF60の振幅:" & stopF60dB & vbCrLf)
    End Sub

メモ2

'*******************************************************************************************************
'マスク値の計算
Function CalcMaskData(Freq As Double) As Double
    
    '60dB境界下限周波数より低い場合
    '60dB境界上限周波数より高い場合
    If Freq <= StartF60 Or Freq >= StopF60 Then
        CalcMaskData = (-60dB or 43+10log(PEP))
    End If
    
    '40dB帯域内の場合
    If Freq >= StartF40 And Freq <= StopF40 Then
        CalcMaskData = 0
    End If
    
    '60dB境界下限周波数~40dB境界下限周波数の場合
    If Freq > StartF60  And Freq < StartF40  Then
    '   CalcMaskData = -40 - 30 * Log(2 * (CenterF - Freq) / D40Width) / Log(10)
  'D40Width:40dB帯域幅
        CalcMaskData = -40 - 30 * (0.6931 + Log(CenterF - Freq) - lnD40Width) / 2.3026
    End If
    
    '40dB境界上限周波数~60dB境界上限周波数の場合
    If Freq < StopF60  And Freq > StopF40  Then
'        CalcMaskData = -40 - 30 * Log(2 * (Freq - CenterF - OffsetF) / D40Width) / Log(10)
        CalcMaskData = -40 - 30 * (0.6931 + Log(Freq - CenterF) - lnD40Width) / 2.3026
    End If
    
    Exit Function

End Function
'******************************************************************************************
【マスクデータの生成について】 
マスクデータを生成する際、周波数点は以下のようにしています。 
①下記の周波数点は必ず生成されるようにしています。 
 ・40dB 帯域幅の上限下限の周波数点 
   マスクデータ = 0dB 
 ・40dB 帯域幅の上限+0.001 Hz、下限-0.001 Hz の周波数点 
   マスクデータ = -40dB 
 ・帯域外領域とスプリアス領域の境界周波数 
   マスクデータ = 43+10log(PEP)か-60dBのどちらか小さい方

②帯域外領域とスプリアス領域の境界周波数内のマスクデータ計算周波数点は
 40 dB 帯域幅内を含めて、参照帯域幅の Step で生成されます。 

③測定開始周波数から帯域外領域とスプリアス領域の境界周波数の下側までの周波数点は 
 5 点程度になるように生成しています。 

④帯域外領域とスプリアス領域の境界周波数の上側から測定終了周波数までの周波数点は 
 5点程度になるように生成しています。 

'****************************************************************************************
【分かったこと】
・電力5W以下は43+10log(PEP)の方が小さい
・スプリアスのATTは入力レベルの適正、通常は内部回路の保護のため最低でも10dBは入れておく
 →尖っていない方だけ変化する。低いほど低い、大きいほど高い。

メモ

①フォーム閉じる時の保存確認を排除
②セッティング保存ボタンを設ける
③パルス特性の結果を反映させるテキストボックスを用意する
 →40dB帯域幅にも反映させる
④電力測定後、PEPに反映させる(空中線電力)
⑤規格線作成

【短パルス選択時】
●下記の定数/値を取得する(初期設定)
・中心周波数
・40dB帯域幅
・測定周波数範囲下限(開始周波数)[MHz]
・測定周波数範囲上限(終了周波数)[MHz]
・オフセット周波数[MHz]
・参照帯域幅[MHz]
・減衰曲線(30dB/decade)
・空中戦電力[W]

●結果を入れておくといい
・帯域外領域とスプリアス領域との境界 下側
・40dB帯域幅 下側
・40dB帯域幅 上側
・帯域外領域とスプリアス領域との境界 上側

●参照帯域幅(スプリアス領域で測定する周波数帯ごとに定義される)計算
 入力値:(ユーザー)[MHz]
 選択:1MHz固定、指定値、
    非符号化パルス変調(固定周波数):1/パルス幅[us]
    位相変調符号化パルスレーダー(固定周波数):1/移送変調チップ長[us]
    周波数変調及びチャープレーダ:√(周波数偏移幅[MHz]/パルス幅[us])

③規格線作成
dim LimitNo as long
dim MaskFreq() as double
dim MaskLimit() as double

LimitNo = 0
Erase MaskFreq
Erase MaskLimit

・ステップ周波数(-60dBのポイント数を減らす式)  
    TempF = Int*1
    End If
    
    '40dB帯域内の場合
    If Freq >= StartF40 And Freq <= StopF40 Then
        CalcMaskData = 0
    End If
    
    '60dB境界下限周波数~40dB境界下限周波数の場合
    If Freq > StartF60  And Freq < StartF40  Then
    '   CalcMaskData = -40 - 30 * Log(2 * (CenterF - Freq) / D40Width) / Log(10)
  'D40Width:40dB帯域幅
        CalcMaskData = -40 - 30 * (0.6931 + Log(CenterF - Freq) - lnD40Width) / 2.3026
    End If
    
    '40dB境界上限周波数~60dB境界上限周波数の場合
    If Freq < StopF60  And Freq > StopF40  Then
'        CalcMaskData = -40 - 30 * Log(2 * (Freq - CenterF - OffsetF) / D40Width) / Log(10)
        CalcMaskData = -40 - 30 * (0.6931 + Log(Freq - CenterF) - lnD40Width) / 2.3026
    End If
    
    Exit Function

End Function
'******************************************************************************************
【マスクデータの生成について】 
マスクデータを生成する際、周波数点は以下のようにしています。 
①下記の周波数点は必ず生成されるようにしています。 
 ・40dB 帯域幅の上限下限の周波数点 
   マスクデータ = 0dB 
 ・40dB 帯域幅の上限+0.001 Hz、下限-0.001 Hz の周波数点 
   マスクデータ = -40dB 
 ・帯域外領域とスプリアス領域の境界周波数 
   マスクデータ = 43+10log(PEP)か-60dBのどちらか小さい方

②帯域外領域とスプリアス領域の境界周波数内のマスクデータ計算周波数点は
 40 dB 帯域幅内を含めて、参照帯域幅の Step で生成されます。 

③測定開始周波数から帯域外領域とスプリアス領域の境界周波数の下側までの周波数点は 
 5 点程度になるように生成しています。 

④帯域外領域とスプリアス領域の境界周波数の上側から測定終了周波数までの周波数点は 
 5点程度になるように生成しています。 

'****************************************************************************************
【分かったこと】
・電力5W以下は43+10log(PEP)の方が小さい
・スプリアスのATTは入力レベルの適正、通常は内部回路の保護のため最低でも10dBは入れておく
 →尖っていない方だけ変化する。低いほど低い、大きいほど高い。

以上

*1:StartF60 - StartF) / 20)
    Select Case TempF 
        Case Is < 1:            StepNegF = 0.1
        Case Is < 10:           StepNegF = Int(TempF)
        Case Is < 100:          StepNegF = Int(TempF / 10) * 10
        Case Is < 1000:         StepNegF = Int(TempF / 100) * 100
        Case Is < 10000:        StepNegF = Int(TempF / 1000) * 1000
        Case Else:              StepNegF = 10000
    End Select
    
    TempF= Int((StopF - StopF60) / 20)
    Select Case TempF
        Case Is < 1:            StepPosF = 0.1
        Case Is < 10:           StepPosF = Int(TempF)
        Case Is < 100:          StepPosF = Int(TempF / 10) * 10
        Case Is < 1000:         StepPosF = Int(TempF / 100) * 100
        Case Is < 10000:        StepPosF = Int(TempF / 1000) * 1000
        Case Else:              StepPosF = 10000
    End Select

 '①startF~StartF60
I = 1
Do While Integer.Parse(StartF + (I - 1) * StepNegF) < StartF60
 If I = 1 Then
  Freq = StartF
 Else
  Freq = Integer.Parse(StartF + (I - 1) * StepNegF)
 End If
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
 LimitNo = LimitNo + 1
 I = I + 1
Loop

'②StartF60~StartF40
I = 1
Do While (StartF60 + (I - 1) * BWref < StartF40
 'BWref:参照帯域幅[MHz]
    Freq = StartF60 + (I - 1) * BWref 
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
 LimitNo = LimitNo + 1
    I = I + 1
Loop

'③StartF40
Freq = StartF40
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
LimitNo = LimitNo + 1

'④StartF40~StopF40
I = 1
Do While (StartF40) + (I - 1) * BWref < StopF40
    Freq = (StartF40) + (I - 1) * BWref
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
 LimitNo = LimitNo + 1
 I = I + 1
Loop

'⑤StopF40
Freq = StopF40
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
LimitNo = LimitNo + 1


'⑥StopF40~StopF60
I = 2
Do While (StopF40) + (I - 1) * BWref < StopF60
    Freq = (StopF40) + (I - 1) * BWref
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
    LimitNo = LimitNo + 1
    I = I + 1
Loop

'⑦StopF60 ~ F_Stop
I = 1
Freq = (StopF60) + (I - 1) * StepPosF
Ret = SetMaskData(LimitNo, Freq)
LimitNo = LimitNo + 1

I = 2
Do While (StopF60) + (I - 1) * StepPosF < StopF
    Freq = Integer.Parse(StopF60) + (I - 1) * StepPosF
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
 LimitNo = LimitNo + 1
    I = I + 1
Loop

 MaskFreq(LimitNo)=StopF
 MaskLimit(LimitNo)=CalcMaskData(Frep)


'*******************************************************************************************************
'マスク値の計算
Function CalcMaskData(Freq As Double) As Double
    
    '60dB境界下限周波数より低い場合
    '60dB境界上限周波数より高い場合
    If Freq <= StartF60 Or Freq >= StopF60 Then
        CalcMaskData = (-60dB or 43+10log(PEP

VBA ExcelでWordのテキストボックス内の文字列に取り消し線を表示させる

Sub EXCEL_WORD02() 'EXCEL VBAから既存のWORDファイルを起動する。
 
    Dim WordApp As Object
    Dim WordDoc As Word.Document
                            '
    Set WordApp = CreateObject("Word.Application") ' CreateObject関数でWordをセット
 
    WordApp.Visible = True 'Wordを起動する
  
    Set WordDoc = WordApp.Documents.Open("C:\Users\sannp\OneDrive\デスクトップ\test01.docx") ' 指定したWordファイルを起動します。
 
    Dim srcText As String
    srcText = "なおき"
     
    Dim shp As Object  ' Word.Shape
 
    For Each shp In WordApp.ActiveDocument.Shapes
        If shp.Type = msoTextBox Then
            Call DoubleStrikeText(shp, srcText)

        End If
    Next
    
End Sub

 

Public Sub DoubleStrikeText(shp As Variant, srcText As String)
    
    If shp.TextFrame.HasText Then
        Dim objFind As Find
        Set objFind = shp.TextFrame.TextRange.Find
        
        objFind.ClearFormatting
        objFind.Forward = True
        objFind.Text = srcText
        objFind.Replacement.Font.DoubleStrikeThrough = True
        Call objFind.Execute(Replace:=wdReplaceAll)
        
    End If
End Sub

 

 

VBA ExcelでWordのテキストボックス内の文字列を置換

Sub EXCEL_WORD01() 'EXCEL VBAから既存のWORDファイルを起動する。
 
    Dim WordApp As Object
    Dim WordDoc As Word.Document
                            '
    Set WordApp = CreateObject("Word.Application") ' CreateObject関数でWordをセット
 
    WordApp.Visible = True 'Wordを起動する
  
    Set WordDoc = WordApp.Documents.Open("C:\Users\sannp\OneDrive\デスクトップ\test01.docx") ' 指定したWordファイルを起動します。
 
 
     '--- 置換前の文字列 ---'
    Dim srcText As String
    srcText = "置換前"
    
    '--- 置換後の文字列 ---'
    Dim replaceText As String
    replaceText = "置換後"
 
 
 
    Dim shp As Object  ' Word.Shape
 
    For Each shp In WordApp.ActiveDocument.Shapes
        If shp.Type = msoTextBox Then
            'MsgBox shp.TextFrame.TextRange.Text
            Call ReplaceShapeText(shp, srcText, replaceText)
        End If
    Next
    

    
End Sub
 

Public Sub ReplaceShapeText(shp As Variant, srcText As String, replaceText As String)
    
    If shp.TextFrame.HasText Then
        Dim objFind As Find
        Set objFind = shp.TextFrame.TextRange.Find
        
        objFind.ClearFormatting
        objFind.Forward = True
        objFind.Text = srcText
        objFind.Replacement.Text = replaceText
        Call objFind.Execute(Replace:=wdReplaceAll)
        
    End If
End Sub