私が作業しているExcelファイルのマクロコードを書き込もうとしています(Office 2016 for Mac)。Excel VBAファイルが開いているときにエラーが発生した場合 - Mac Office
コードは2つの部分で構成されています: 1.特定のセルが変更されたときに、csvファイルを開き、読み込んだ後、それを操作する関数を起動するWorkbook_SheetChangeリスナー。この部分はうまく動作します。 2.上記の同じcsvファイルから読み込み、それに従ってブック内のセルを変更する必要があるボタン。私は上記の機能を追加するまで働いていた。
ここで、csvから読み取るためにボタンを押すと、エラーが「ファイルはすでに開いています」とジャンプし、デバッグを押して失敗した箇所を確認すると、シート変更されたマクロ内の関数まったく誘発されるべきではない)。
読み取り機能は次のとおりです。
とリスナーの機能サブ
Private Sub ReadCSV_Click()
Dim serial As String
Dim signer As String
loc_idx = -1
Dim FilePath As String
FilePath = ThisWorkbook.Path + "/test.csv"
Open FilePath For Input As #1
row_number = 0
Do Until EOF(1)
Line Input #1, LineFromFile
LineItems = Split(LineFromFile, ",")
signer = Replace(LineItems(0), Chr(34), vbNullString) 'Location
If Not signer = vbNullString Then
serial = Replace(CStr(LineItems(1)), Chr(34), vbNullString) 'SN
Call SearchCell(serial) 'Search the SN
Call SearchLocationCol(f_ws_idx) 'Search Location column in the relevant sheet
Worksheets(f_ws_idx).Cells(f_row, loc_idx).Value = signer
End If
row_number = row_number + 1
Loop
Close #1
MsgBox "Done Updating"
エンドは、次のとおりです。
Option Explicit
Public Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Sh.Name = "Macros" Then
Call InsertChange("test", "1111")
End If
End Sub
Private Sub InsertChange(n_loc As String, n_ser As String)
Dim LineFromFile As String
Dim LineItems() As String
Dim split_new_csv() As String
Dim is_new As Boolean
Dim serial_changed As String
Dim location_changed As String
Dim new_csv_str As String
Dim signer As String
Dim serial As String
Dim row_number As Integer
Dim rec As Variant
Dim rec_item As Variant
is_new = True
new_csv_str = ""
serial_changed = n_ser
location_changed = n_loc
Dim FilePath As String
FilePath = ThisWorkbook.Path + "/test.csv"
Dim FilePathTemp As String
Dim scriptstr As String
scriptstr = "return posix path of (path to desktop folder) as string"
FilePathTemp = MacScript(scriptstr) + "s.csv"
Open FilePath For Input As #1
row_number = 0
Do Until EOF(1) 'Go Through all of the lines in the csv
Line Input #1, LineFromFile
LineItems = Split(LineFromFile, ",")
signer = Replace(LineItems(0), Chr(34), vbNullString) 'Location
If Not signer = vbNullString Then
serial = Replace(CStr(LineItems(1)), Chr(34), vbNullString) 'SN
If serial = serial_changed Then
is_new = False
signer = location_changed
End If
new_csv_str = new_csv_str + signer + "," + serial + "\n"
row_number = row_number + 1
End If
Loop
Close #1
MsgBox "Done updating"
End Sub
はい、コードは、クリーンアップが必要ですが、デバッグエラーがいい私に:
Open FilePath For Input As #1
リスナーコード内で、それはまったくアクティブ化されるべきではありません。私は、リスナーに複製を作成し、それを他のファイルとして扱うために変数名を変更しようとしましたが、それでも動作しません。
これを解決する方法はありますか?
ありがとうございました。
ありがとう!これは、ReadCell関数を正しく起動させるようです。 – Jonathan