|
Public Sub プリンタ名設定()
Sheets("List").Select
ActiveSheet.Range("E3:E20").ClearContents
ActiveSheet.Range("E3").Select
Dim vntArray As Variant, Element As Variant
Dim intCount As Integer, strPrinter As String, intPos As Integer, strPort As String
'エントリ検索
vntArray = API_GetProfileString("Devices", vbNullString, "NotFound", 1024, Chr(0))
If IsEmpty(vntArray) = False Then
For intCount = LBound(vntArray) To UBound(vntArray)
'キー検索
strPrinter = vntArray(intCount) 'プリンタ名
Element = API_GetProfileString("Devices", strPrinter, "NotFound", 1024, Chr(0))
If IsEmpty(Element) = False Then
intPos = InStr(1, Element(0), ",")
'区切り文字(,)位置
If intPos <> 0 Then strPort = Mid(Element(0), intPos + 1, Len(Element(0)) - intPos)
'====================
Debug.Print strPort & " on " & strPrinter
'====================
'アクティブなセルへプリンタ名を代入する
ActiveCell = strPrinter & " on " & strPort
ActiveCell.Offset(1, 0).Select 'アクティブセルの移動
End If
Next intCount
End If
End Sub
'以下は関数***
Public Function API_GetProfileString(strAppName As String, strKeyName As String, strDefault As String, _
lngSize As Long, strDelimiter As String) As Variant
Dim strBuf As String '情報を取得するためのバッファ
Dim lngResult As Long '戻り値
Dim lngStart As Long, lngPos As Long
Dim strTemp As String, strArray() As String, intCount As Integer
'On Error Resume Next
'---------------------------------------------------------------------------
'関数の呼び出し
'---------------------------------------------------------------------------
'WIN.INI からの情報を取得するためのバッファ
strBuf = Space(lngSize)
'WIN.INI から指定したエントリないでキーを検索、該当データのバイト数を返す
lngResult = GetProfileString(strAppName, strKeyName, strDefault, strBuf, lngSize)
'戻り値(テンポラリ)
strTemp = Trim(Left(strBuf, lngResult))
'---------------------------------------------------------------------------
'戻り値チェック
'---------------------------------------------------------------------------
If strTemp = Empty Then API_GetProfileString = Empty: Exit Function 'キーなし時
If strTemp = strDefault Then API_GetProfileString = Empty: Exit Function '該当なし時
lngStart = 1: intCount = Empty
'**********
'複数戻り値の場合のチェック
Do
lngPos = InStr(lngStart, strTemp, strDelimiter) 'データ区切り位置検出
If lngPos = 0 And (lngStart > 1) Then Exit Do 'データ区切りなし時終了
If Mid(strTemp, lngStart, 1) <> strDelimiter Then
'区切られたデータを配列に格納
ReDim Preserve strArray(intCount) As String
If lngPos = 0 Then
strArray(intCount) = strTemp
Else
strArray(intCount) = Mid(strTemp, lngStart, lngPos - lngStart)
End If
End If
lngStart = lngPos + 1 '検索開始位置
intCount = intCount + 1 '配列の要素インデックス増
Loop Until lngPos = 0
'**********
'戻り値
API_GetProfileString = strArray
End Function
|
|