1

ワークブックを開いてそこからシートを削除しようとしていますが、コードはエラーなしで実行され、シートはまだそこにあります...数式を別のシートの値に変更したため、シートを変更できます。まず第一に - はい、「i」変数が1回の反復を行うように設定されていることを知っています。どういうわけか、ワークブックを開くと、私によってロックされていると表示されます-どうすればよいかわかりません。

では…どうすればロックを解除できますか?ファイル - >情報 - >アクセス許可に移動すると、「誰でもこのワークブックの任意の部分をコピー、変更、および変更できます...シートを手動で削除することもできます...

コードは次のとおりです。

Sub Change()

Dim wb As Excel.Workbook
Set wb = ThisWorkbook

Dim ws As Excel.Worksheet
Set ws = wb.Sheets("FileSearch Results")

Dim rng As Range
Set rng = ws.UsedRange

Dim cPaths As Integer
cPaths = rng.Column

Dim i As Integer
i = rng.Row

Dim oExcel As Excel.Application
Set oExcel = New Excel.Application

Dim oWB As Workbook

Dim komm As Excel.Worksheet
Dim sh1 As Excel.Worksheet

Do While i < 2
    Dim pth As String
    pth = ws.Cells(i, cPaths)
    Set oWB = oExcel.Workbooks.Open(pth)

    Set sh1 = oWB.Worksheets("Sheet1")
    With sh1.UsedRange
        .Value = .Value
    End With

    Set komm = oWB.Worksheets("Kommentar")
    Application.DisplayAlerts = False
    komm.Delete
    Application.DisplayAlerts = True



    oWB.Close savechanges:=True
    i = i + 1
Loop
End Sub

何か案は?

4

2 に答える 2

1
Sub Change()

Dim wb As Excel.Workbook
Set wb = ActiveWorkbook 'ThisWorkbook

Dim ws As Excel.Worksheet
Set ws = wb.Sheets("FileSearch Results")

Dim rng As Range
Set rng = ws.UsedRange

Dim cPaths As Integer
cPaths = rng.Column

Dim i As Integer
i = rng.row

'Dim oExcel As Excel.Application ***CHANGED***
'Set oExcel = New Excel.Application ***CHANGED***

'Dim oWB As Workbook ***CHANGED***

Dim komm As Excel.Worksheet
Dim sh1 As Excel.Worksheet

Do While i < 2
    Dim pth As String
    pth = ws.Cells(i, cPaths)
    'Set oWB = oExcel.Workbooks.Open(pth) ***CHANGED***

    Workbooks.Open (pth) '***ADDED***

    Set sh1 = ActiveWorkbook.Worksheets("Sheet1") 'oWB.Worksheets("Sheet1") ***CHANGED***
    With sh1.UsedRange
        .Value = .Value
    End With

    Set komm = ActiveWorkbook.Worksheets("Kommentar") 'oWB.Worksheets("Kommentar") ***CHANGED***
    Application.DisplayAlerts = False
    komm.Delete
    Application.DisplayAlerts = True

    ActiveWorkbook.Close savechanges:=True 'oWB.Close savechanges:=True ***CHANGED***
    i = i + 1

Loop

End Sub

これにより、バックグラウンドで Excel の新しいインスタンスを呼び出してシートを削除するのではなく、ワークブックを開いてフォアグラウンドでシートを削除するようになりました。これが、コードによって閉じられていない新しいインスタンスがまだファイルを保持しているため、ファイルがロックされたままになる理由です。

于 2013-05-08T11:23:30.423 に答える