0

私はしばらくの間、これを理解する方法を試してきました。ほとんどの人がコードを変更できるようにしたくないので、vba プロジェクトをロックしました。問題は、ユーザー入力に基づいて他のモジュールを変更するコードがあることです。ロックされているモジュールは変更できないため、明らかに問題が発生します。私が「sendkeys」をしない方法なので(笑)、コードを変更できるようにロックを解除する実際的な方法はありません。

そこで、.xlam アドインを作成しました。モジュールは新しいコードをファイルに書き込み、それを .bas タイプとして保存してから、アドインがそれをインポートして実行します。

しかし...

ワークブック (.xlam アドインのモジュールを生成したもの) とのやり取りに問題があります。以下は、私がトリッキーだと思っているコードの部分です。これは主に、自動入力の実行と、ワークブックでのフォームの更新に関連しています。

public sub wbUpdate()
    Dim wb as workbook
    Set wb = workbooks("WB.xlsm")
    Dim lastRow as long

    '======example #1====== not sure my autofill syntax is right:
    Worksheets("Sheet1").Select
    lastRow = wb.worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).row
    k = lastRow
    wb.worksheets("Sheet1").Range("B2").Select
    wb.worksheets("Sheet1").Range("B2").value = ""

    'below is where I get a runtime error, not sure why
    wb.worksheets("sheet1").Range("B2").AutoFill _ 
        Destination:=wb.worksheets("Sheet1").Range("B2:B" & lastRow)

    '======Example #2====== Try to show a userForm and center
    'but can't seem to get the syntax right

    With wb.progressBar '<== runtime error on @ this line
        .StartUpPosition = 0
        .Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
        .Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)
        .Show
    End With
End Sub

これらが主な問題です。個人的には、ワークシートから直接コードを実行したいのですが (つまり、Range("A1") のようなものを実行するモジュールを考えます - "msgbox someString" のように)、これが可能かどうかさえわかりません。これはかなり前から気になっていた

#1 と #2 など、構文がどうあるべきかについての指針 - および/またはシートからコードを直接実行する方法に関するアイデア、それによって頭痛をすべて回避しますか?

4

0 に答える 0