1

Excelで何か新しいことを試しています。私はVBAの初心者なので、ご容赦ください。

たくさんのものが入ったフォームがあります.1つのアイテムは、スプレッドシートを開くボタンです。フォームから新しく開いたスプレッドシートに情報を渡したいのですが、壁にぶつかっています。私は次のことをしました..

フォームの上部でパブリック変数を宣言しました

Public instno As String

次に、フォームの初期化時に、現在のワークシートからこの文字列に値を割り当てます。

Sub UserForm_Initialize()
instno = Cells(ActiveCell.Row, "J").Value
' other stuff in here too, this is just for this problem...
End Sub

新しいワークブックを開くボタンのコードで、値を渡そうとしています。

Private Sub CMB2_Click() 
Dim xlApp As Excel.Application 
Set xlApp = CreateObject("Excel.Application") 
xlApp.Visible = True 
xlApp.Workbooks.Open Filename:="G:\tracking.xlsm"
Cells(13, "E").Value = instno 'data should go into cell E13
End Sub

私にはうまくいきません、何か提案はありますか?ワークブックは問題なく開きますが、データを取り込めません。

4

1 に答える 1

0

これを Excel で行っている場合は、CreateObject毎回行う必要はありません。この例を参照してください。また、オブジェクトを操作するときは、それらを完全に修飾してください。

Dim instno As String

Sub UserForm_Initialize()
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Sheet1")

    '~~> Though I am not in favor of `ActiveCell`. Use the actual cell address
    instno = ws.Range("J" & ActiveCell.Row).Value
End Sub

Private Sub CMB2_Click()
    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = Workbooks.Open(Filename:="G:\tracking.xlsm")
    '~~> Change this to the relevant worksheet
    Set ws = wb.Sheets("Sheet1")

    ws.Range("E13").Value = instno
End Sub

ファローアップ

道をたどりたい場合は、CreateObjectこれを試してください

Dim instno As String

Sub UserForm_Initialize()
    Dim wsThis As Workbook
    Set wsThis = ThisWorkbook.Sheets("Sheet1")

    '~~> Though I am not in favor of `ActiveCell`. Use the actual cell address
    instno = ws.Range("J" & ActiveCell.Row)
End Sub

Private Sub CMB2_Click()
    Dim xlApp As Object, xlWb As Object, xlWs As Object

    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True

    Set xlWb = xlApp.Workbooks.Open(Filename:="G:\tracking.xlsm")
    '~~> Change this to the relevant worksheet
    Set xlWs = xlWb.Sheets("Sheet1")

    xlWs.Range("E13").Value = instno
End Sub
于 2013-04-21T09:44:35.337 に答える