2017-06-15 20 views
0

ここでフォーラムを検索しましたが、このコードを動作させることはできません。アクセスからExcelの名前付きセルに書き込む

Excelでワークブックを開いて、いくつかのセル(名前付き範囲)を設定しようとしています。私は正常にブックを開くことができます(ワークブックには、VBAのビットがありますが、フォーマットするだけでも起動します)。しかし、情報を入力すると「実行時エラー」が表示されます。このプロパティまたはメソッドをサポートしてください。

他の同様の質問の前回の回答から、私はすべてのことを示唆していましたが、私はそれを動作させるようには見えません。

As a Sidenote this is not a form it is just spreadsheet

Option Compare Database 
Option Explicit 

Public Sub MaterialInput() 

Dim xlapp As Excel.Application 
Dim wb As Excel.Workbook 
Dim ws As Excel.Worksheet 
Dim RsClient As Recordset 
Dim RsJobsite As Recordset 
Dim db As Database 
Dim ClientSTR As String 
Dim JobsiteSTR As String 
Dim customer As Variant 

Set db = CurrentDb 
JobsiteSTR = "SELECT T1Jobsites.JobsiteNickName FROM T1Jobsites WHERE T1Jobsites.JobsiteID = 1" ' & Form_LEM.TxtJobsiteID 
Set RsJobsite = db.OpenRecordset(JobsiteSTR, dbOpenSnapshot, dbSeeChanges) 

ClientSTR = "SELECT T1Companies.CompanyName " & _ 
      "FROM T1Companies INNER JOIN T1Jobsites ON T1Companies.CompanyID = T1Jobsites.CompanyId " & _ 
      "WHERE (((T1Jobsites.JobsiteID)=1))" 
'ClientSTR = "SELECT T1Companies.CompanyName FROM T1Companies INNER JOIN T1Jobsites ON T1Companies.CompanyID = T1Jobsites.CompanyID" & _ 
       " WHERE T1JobsitesID = 1" '& Form_LEM.TxtJobsiteID 
Set RsClient = db.OpenRecordset(ClientSTR, dbOpenSnapshot, dbSeeChanges) 

Set xlapp = CreateObject("excel.application") 


Set wb = xlapp.Workbooks.Open("C:\Users\coc33713\Desktop\VISION - EXCEL FILES\VISIONCOUNT.xlsm") 
Set ws = xlapp.Worksheets("CountSheet") 
xlapp.Visible = True 

'Tried this second after reading another forum 
'the comments Recordset will be the actual values used, but I can't get the String "TEST" to work 

wb.ws.Range("Client").Value = "TEST"  'RsClient!CompanyName 

'Tried this way first 
xlapp.ws.Range("'SiteName'").Value = "Test"  'RsJobsite!JobsiteNickName" 
xlapp.ws.Range(Date).Value = "Test"   'Form_LEM.TxtDate 
xlapp.ws.Range(ProjectName).Value = "Test"  'Form_LEM.TxtPlant 
xlapp.ws.Range(ScaffoldID).Value = "Test" 'Form_LEM.cboScaffnum.Value 
xlapp.ws.Range(ScaffoldNumber).Value = "Test"  'Form_LEM.cboScaffnum.Column(1) 

Set xlapp = Nothing 
Set wb = Nothing 
Set ws = Nothing 
Set RsClient = Nothing 
Set RsJobsite = Nothing 
Set db = Nothing 


End Sub 
はあなたにみんなありがとう!

+0

FWIW(ないあなたの問題 - スコットの答えによって解決される):セットのWS =のxlapp.Worksheets( "CountSheetは") ''のWS =のwb.Worksheetsを設定する必要があります 'ことに注意してください( "CountSheet")' 。 'xlapp.Worksheets(" CountSheet ")'を使うと効果的な 'xlApp.ActiveWorkbook.Worksheets(" CountSheet ")'が**(おそらく) 'xlApp.Workbooks(" VISION - EXCEL FILES \ VISIONCOUNT。 xlsm ")。ワークシート(" CountSheet ")'しかし、それを偶然に残すのではなく、正確に行う方が良いです。 – YowE3K

+0

@ YowE3Kありがとう、この小さなミスは、正解ですありがとう!!!! –

答えて

2

使用

ws.Range("Client").Value = "Test" 

それとも

Dim sName as String 
sName = "Client" 

ws.Range(sName).Value = "Test" 

理由ビーイングは、あなたがすでに設定wsオブジェクトを持っているということですので、再びそれに親子関係を割り当てる必要はありません。実際、そうしようとすると構文規則が破られます。

+0

ありがとう私はあなたの答えを考慮に入れましたが、それは逃した宣言であることが判明しました。ありがとうございました –

0

FWIW(ないあなたの問題 - スコットの答えによって解決される): Set ws = xlapp.Worksheets("CountSheet") は Set ws = wb.Worksheets("CountSheet")でなければならないことに注意してください。 xlapp.Worksheets("CountSheet") を使用して

は効果的かもしれませんxlApp.ActiveWorkbook.Worksheets("CountSheet")である(そしておそらく)xlApp.Workbooks("VISION - EXCEL FILES\VISIONCOUNT.xlsm").Worksheets("CountSheet")が、それを行うのではなく、正しくチャンスに任せる方が良いです。

ありがとう!

0

これは、必要な操作を行う必要があります。

Sub DAOFromExcelToAccess() 
' exports data from the active worksheet to a table in an Access database 
' this procedure must be edited before use 
Dim db As Database, rs As Recordset, r As Long 
    Set db = OpenDatabase("C:\FolderName\DataBaseName.mdb") 
    ' open the database 
    Set rs = db.OpenRecordset("TableName", dbOpenTable) 
    ' get all records in a table 
    r = 3 ' the start row in the worksheet 
    Do While Len(Range("A" & r).Formula) > 0 
    ' repeat until first empty cell in column A 
     With rs 
      .AddNew ' create a new record 
      ' add values to each field in the record 
      .Fields("FieldName1") = Range("NamedRange1").Value 
      .Fields("FieldName2") = Range("NamedRange2").Value 
      .Fields("FieldNameN") = Range("NamedRangeN").Value 
      ' add more fields if necessary... 
      .Update ' stores the new record 
     End With 
     r = r + 1 ' next row 
    Loop 
    rs.Close 
    Set rs = Nothing 
    db.Close 
    Set db = Nothing 
End Sub 
関連する問題