Tag: access vba

Excel文件太大 – 340 MB – 迁移访问?

我有一个约340 MB的Excel文件,其中包含2000多个工作表和几十个长的VBA程序。 文件越来越大,打开文件需要10-15分钟左右,当我保存或debugging文件时,经常进入“无响应”,“无法使用的资源”。 我在网上search的人build议迁移到Acesss。 不过,我从来没有使用过Access。 所以我想知道 1)如何迁移excel文件来访问? 2)将VBA程序带到新的访问文件3)我是否需要修改excel VBA代码以适应Access? 2)可以访问处理300-500MB文件? 谢谢

从Excel VBA运行访问模块

我尝试在Access上运行这个模块: Public Sub Retriever_P(path) DoCmd.TransferSpreadsheet acImport, 10, "Product_Details", path, True, "" End Sub 从Excel中的这个VBA代码 Private Sub CommandButton210_Click() Dim appAccess As Access.Application Set appAccess = New Access.Application Dim Target As String: Target = ThisWorkbook.Sheets("CODE").Cells(8, 4).Value Dim path As String: path = ThisWorkbook.Sheets("CODE").Cells(5, 13).Value appAccess.OpenCurrentDatabase Target appAccess.Visible = True appAccess.DoCmd.SetWarnings False appAccess.UserControl = True appAccess.DoCmd.OpenQuery "Clean Product_Details" […]

Access / Excel VBA – 删除显示警报和消息

我有一个访问macros/ VBA编辑后保存几个Excel工作簿。 但有时其他用户可能正在使用其中一个excel文件在读/写模式。 出现下面的消息框,我所做的是继续单击否直到用户完成使用Excel文件 一旦文件出现在消息框下方,我点击“读写”,我的代码从停止的位置恢复(图像示例) 问题 – 如何获得Access VBA或Excel VBA为我点击“否”? 注意:我使用了Application.DisplayAlerts和DoCmd.SetWarnings ,默认值是Yes 。 (或者可能是我没有正确实施)。 码: Access / Excel VBA – 时间延迟 Function RefreshExcelTables() On Error GoTo Error Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.workbooks.Open "c:\test\Test_Sheet1.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet2.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet3.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close Error: If Err.Number = 1004 […]

在activex文本框VBA中设置date格式为dd-mmm-yyyy

有没有办法在ActiveX TextBox中设置date格式为dd-mmm-yyyy ? 我使用下面的代码来分隔报价,但是在用户放置月份的时候有一个错误,也就是说,1993年5月31日,但有时用户正在把2015年5月31日。 由于无法通过服务器获取数据… Private Sub TextBox1_Change() If TextBox1.TextLength = 2 Or TextBox1.TextLength = 6 Then TextBox1.Text = TextBox1.Text + "-" End If End Sub

VBA保持excel文件在代码后自锁

我一直在遇到这个代码的问题。 如果我重新启动计算机并运行它,它的工作正常,但一旦代码已经运行一旦开始导致错误。 我将得到“保存错误”或“pipe理员错误”,因为文件(原始或其他)是不可访问的。 我有时可以closures从任务pipe理器的后台excel程序来解决它(但不是总是) 该代码的目的是从互联网上下载一个Excel工作表,并将新行(并更新旧行)添加到ms访问数据库。 最奇怪的是我还没有看到任何有逻辑错误的趋势。 Const localSaveLocation = ######## Const NetworkDSRTLocation = ######## Private Sub download_btn_Click() Dim xlsApp As Excel.Application Dim xlsBook As Excel.Workbook Dim xlsSheet As Excel.Worksheet On Error GoTo adminError Set xlsBook = Workbooks.Open(NetworkDSRTLocation) Set xlsApp = xlsBook.Parent On Error GoTo 0 ' go to the ERS tab of the workbook, delete […]

我有一些VBA打开电子表格,并从Access导入数据,我如何locking原来的自动“另存为”?

下面的代码附加到一个命令button并打开一个Excel工作簿,然后从Access窗体中导入一打(主要是在下面的代码中编辑)字段。 我遇到的麻烦是用户: (1)使用button一次。 (2)点击“保存”而不是“另存为”。 (3)再次使用button。 (3)抱怨工作簿上有旧的数据。 在下面的代码中,我怎么能: (A)防止用户编辑工作簿的主副本。 (B)打开时自动显示“另存为”对话框。 Private Sub cmd1_Click() Dim appExcel As Excel.Application Dim wbook As Excel.Workbook Dim wsheet As Excel.Worksheet Set appExcel = New Excel.Application appExcel.Visible = True Set wbook = appExcel.Workbooks.Open("F:\Network Folder\MySpreadsheet.xlsx") Set wsheet = wbook.Worksheets("Sheet1") With wsheet .Cells(10, 1).Value = txt1 .Cells(10, 2).Value = txt2 End With End Sub […]

如何更改ACE TypeGuessRows Access 2007的registry值,以便在使用VBA从Excel文件导入时正确地确定字段数据types

我有一个Access数据库从外部Excel电子表格导入数据,其中包含一个名为Date Delivered的数据列。 虽然这一栏中的大部分数据实际上是一个datetypes,但是有时候会有4/5/15,5/1/15这样的条目来表示两个交货date。 当使用以下命令导入数据时,它将访问Access: DoCmd.TransferSpreadsheet acImport, 5, "Delivery Data", "\\File\Path.xlsx", True 这导致它使列成为datetypes而不是从那些有问题的字段中删除任何值的string。 我发现这里似乎是一个有用的解决scheme,build议将TypeGuessRowsregistry值更改为0,以使Jet在确定字段数据types时查看所有行。 我使用以下代码创build并更改了registry值: Dim RegLoc As String Dim myWS As Object 'Writes registry value to make Jet check all rows (0) not just first 25 (Default value = 8) to determine type RegLoc = "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows" Set myWS = CreateObject("WScript.Shell") myWS.RegWrite RegLoc, 0, "REG_DWORD" 不幸的是,这似乎并没有工作,因为问题在更改值和重新启动Access和Excel后仍然存在。 […]

使用Excel单元格作为参数来更新数据库

我想使用Excel中存储的信息更新访问数据库,下面是我将使用的单元格的一个示例: 01234 Past 43343 failed 43743 past 这是我迄今为止: Dim strQry As String Dim strID As String Dim strStatus As String strID = CStr(ThisWorkbook.Sheets("Test").Range("A1").FormulaR1C1) strStatus = CStr(ThisWorkbook.Sheets("Test").Range("B1").FormulaR1C1) strQry = "Update Tasks SET Status = '" & strStatus & "'" WHERE id= '" & strID & "'" 我不断收到语法错误。 基本上我想用ID来更新任务的状态。 我是Uni的新人,这是第一个编程工作,所以任何帮助将不胜感激。

如何正确查询是否在Access中从Excel中选中checkbox

Excel中的用户窗体上的checkbox6确定查询的select条件。 我需要使用checkbox6的True / False属性来查询位于Access表中的列[Archived]。 例如,如果在用户表单上检查了checkbox6,则[存档]列被查询为“真”值。 列[存档]是数据types是/否。 我已经尝试了“真”和“假”,还有-1和0,但似乎并不奏效。 请看下面我的代码,并build议如何使这项工作。 谢谢 Dim sar4 As String sar4 = "False" SQLwhere = "WHERE " If Len(sar2 & vbNullString) <> 0 Then If CheckBox7 = True Then SQLwhere = SQLwhere & "[MDL_Comments].[AA_change] = '" & sar2 & "' AND " Else SQLwhere = SQLwhere & "[MDL_Comments].[AA_change] LIKE '" & "%" […]

从Access导出到Excel时,单元格内的新行

有没有办法从Access导出到Excel时正确导出单元格内的“新行”。 数据在Access中input,Access中的新行显示OK。 但是,当我将其导出到Excel时,它看起来不太好。 尝试通过删除所有可能的新行字符清除文本,然后将值插入到Excel中(请注意,在“逗号”符号后面需要换行): FText = Replace(rs_Quotation!Text, vbCrLf, "") FText = Replace(rs_Quotation!Text, vbLf, "") FText = Replace(rs_Quotation!Text, vbNewLine, "") FText = Replace(rs_Quotation!Text, vbCr, "") FText = Replace(rs_Quotation!Text, ", ", "," & vbCr) 这看起来不错,但在Excel中打开时,它会在文本上方添加一些额外的空间,并在行之间添加一些空格: 但是,双击并退出单元格后,它会正常。 更新:EntireRow的“AutoFit”方法也没有产生任何效果。