我写的宏(在另一台机器上)突然在我的电脑上表现得很奇怪.我在Excel 2010环境中编写代码,并尝试逐步执行代码.
每次我这样做,经过几行后,其余代码立即执行.如果我设置断点,它将停止.有时候,我可以在再次进行auotexecutes之前逐步完成几行.
是什么赋予了?我在网上找不到任何答案......因此我在Stackoverflow上发表了第一篇文章.
谢谢你的任何提示!这让我的生活变得困难.
更新:我现在已经回到原始编程环境并且通过代码单步执行没有问题.所以它必须是我的Excel设置中的东西!我无法弄清楚它可能是什么.
我需要在Access数据库中保存Word中的格式化文本.
到目前为止,我已经设法找出如何在访问字段中存储格式化文本(在表中创建备注字段并将文本格式设置为富文本).正在搜索SO我还没有遇到如何将所述文本从单词传输到Access的解决方案.
我知道这是可能的,因为如果您手动执行此操作,只需复制和粘贴信息即可.
我的问题是,如何使用VBA将格式化文本从word复制到表中的字段?
通过实验我创建了以下内容来测试它.到目前为止没有成功......
Sub GetComments()
'Imports Analyst Comments from Excel files als OLE Objects.
'---------------------------------
'Access Variables
Dim dbsFundDB As DAO.Database
Dim rsComments As DAO.Recordset
Set dbsFundDB = CurrentDb
Set rsComments = dbsFundDB.OpenRecordset("tblFunds")
'Word Variables
Dim doc As Word.Application
Dim dcmt As Word.Document
Dim sectn As Word.Section
Dim obCommentText As Object
Dim sAnalystText As String
'Open New Word File
Set doc = New Word.Application
doc.Visible = True
Set dcmt = doc.Documents.Open(sPathTemplate)
Set sectn = dcmt.Sections(1)
sectn.Range.Select
Selection.InsertFile FileName:="myfile.rtf", …Run Code Online (Sandbox Code Playgroud) 好.Stackoverflow ...我认为即使对你来说这也是一个难以破解的难题!
我正在使用Office 2010运行Windows 7.我设计了一个Userform可供用户填写.用户表单由常规工作表,公式和一些表单元素(不是active-x类型)组成.一切顺利,直到我尝试将其打印为PDF.然后表单元素都显示为黑盒子!
我正在使用Microsoft Office Native PDF打印机,我需要这样做(因为我有一些可以执行的代码).
我在网上搜索过,只在论坛中找到了两个线程(这里和这里),甚至讨论了这个主题.两个帖子都没有有用的答案.一个帖子声称问题出在Excel(我相信),而且它随着SP2而消失.我安装了SP2,并没有解决这个问题.
以下是它的外观截图:

有谁知道为什么会这样,以及如何解决它?
谢谢!
我有将工作表格式化为所需的设置和布局的代码(横向一页高,横向)。当我运行代码(长宏的一部分)时,它会正确设置pagesetup的格式。
如果我手动导出并将其另存为pdf,则它将使用正确的页面设置,从而生成横向的一页PDF。但是,VBA所做的相同导出将产生几页长的纵向PDF。
我不知道为什么要这么做。我已经尝试了各种解决方案,例如在导出工作表之前选择了工作表,但都无济于事。
任何帮助表示赞赏。
代码如下:
Sub SaveAsPDF()
Sheets(ReportWsName).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
[SaveFolderPath] & "\" & ReportWsName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub
Run Code Online (Sandbox Code Playgroud)
更新:
用于格式化pagesetup的代码(因为时间太长,我只添加了该子项的相关部分)
Private Sub CreateNewReport(ProvisionCode As String, TimeFrom As Date, TimeTo As Date)
... other code here...
'Format report to create the desired layout
With Worksheets(ReportWsName)
'Delete unnecessary data and format the rest
.Range("A:B,D:D,F:G,J:M,O:O,Q:S").Delete Shift:=xlToLeft
.Range("A:F").EntireColumn.AutoFit
.Range("C:C, E:F").ColumnWidth = 30
With .Range("G:G")
.ColumnWidth = 100
.WrapText = True
End With
'Insert standard formating header …Run Code Online (Sandbox Code Playgroud) 我在 Excel 2007/2010 中创建了 VBA 代码以从 CSV 文件导入数据。不幸的是,当我以编程方式打开文件时,某些数据行的数据被分为两列(A 和 B)。
当我手动打开 CSV 文件时,一切都显示正常!
一般来说,CSV 数据如下所示(示例标题行):
TBWAKT;“TBWAKO”;“TBSAIS”;“TBSKU9”;“TBSMOD”;“TBLETT”;“TBKBNR”;“TBBEZ2”;“TBFAR2”;“TBSUGC”;“
TBSOGC”;“TBEINK”;“TBKBGR”; “TBKBGF”;“TBVKPE”;“TBVKPR”;“TBEKPE
”;“TBAUAN”;“TBFAAN”;“TBREAN”;“TBSTAN”;“TBRUAN”;“TBKPAG”;“TBERDT”;“TBDATV”;“TBDATB” ”
导致问题的数据在文本中包含逗号。这是一个例子:
JEAN 5 袋可扩展+1.60M
这是代码:
Private Sub OpenCSV(x As Integer, wkbDashboard As String, wkbCsvImport As String, wksDestination As Worksheet)
' Opens CSV and copies data to current workbook
Dim wkbCsvImportName As String
Dim r As Range
Workbooks(wkbDashboard).Activate
' Open and read CSV
Workbooks.Open Filename:=wkbCsvImport, Format:=xlDelimited, Delimiter:=";"
wkbCsvImportName = ActiveWorkbook.Name
Run Code Online (Sandbox Code Playgroud)
问题的屏幕截图。打开文件后,红色的东西在B栏中。

是否可以将 Excel 数据导出到 XML 文件,其中 XML 架构在其他嵌套列表中嵌套列表?
到目前为止我所尝试过的:谷歌搜索 - 我发现一个线程指出它无法完成,因为 Excel 本质上是一个平面表格:https ://social.msdn.microsoft.com/Forums/vstudio/en-US/8ded1f7a -2f9c-4c5a-aec5-c7bd6c594976/当架构包含列表列表时将数据从 excel 转换为 xml?forum=vsto
在 XML 文件中设置两个嵌套列表的假数据并将其导入 Excel 中。Excel 的自动识别系统可以工作,但即使我不更改任何显示的数据,Excel 也不允许我将文件导出回 XML。
这是我的示例 XML 数据:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Daten>
<Mitarbeiter>
<Vorname>Louis</Vorname>
<Name>Rowbottom</Name>
<Department>BDTP</Department>
<Points>206</Points>
</Mitarbeiter>
<Workdays>
<Holiday>1</Holiday>
<Days>1</Days>
<Days>1</Days>
<Days>1</Days>
<Days>1</Days>
<Days>0</Days>
<Days>0</Days>
<Days>0</Days>
<Sickdays>
<Holiday>1</Holiday>
<Days>1</Days>
<Days>1</Days>
<Days>1</Days>
<Days>1</Days>
<Days>0</Days>
<Days>0</Days>
<Days>0</Days>
</Sickdays>
</Workdays>
</Daten>
Run Code Online (Sandbox Code Playgroud) 我需要每月从各种数据库导入表。导入表后,数据库将被存档并且不会再次查看。
我有以下 VBA 代码,当数据库不受密码保护时,该代码可以正常工作:
Private Sub ImportTheData(ByVal dbImport As String)
DoCmd.SetWarnings False 'Turn OFF display alerts
'Import the full activity & comments table from the Import DB to a temporary table
DoCmd.TransferDatabase acImport, "Microsoft Access", dbImport, acTable, "tbl_Activity", "tbl_TempActivity", True
DoCmd.TransferDatabase acImport, "Microsoft Access", dbImport, acTable, "tbl_Comments", "tbl_TempComments", True
'code continues ...
Run Code Online (Sandbox Code Playgroud)
最后一个参数(storelogin)设置为 true,但似乎无法以编程方式设置这些登录参数(密码)。
当我运行代码时,系统会提示用户输入密码(尽管 SetWarnings = False)。由于我每次都会导入数十个文件,这不是一个可行的解决方案。
DoCmd.TransferDatabase当文件受密码保护时,是否有一种方法可以以编程方式导入表,如果是的话,如何?
我正在尝试用最快的方法在Excel中对具有大约的数据集执行SumIf函数.110'000行.我想出了三种方法,但没有一种方法令人满意.
这是我试过的第一个:在我的电脑上执行时间100秒!
Sub Test1_WorksheetFunction()
Dim MaxRow As Long, MaxCol As Long
Dim i As Long
Dim StartTimer, EndTimer, UsedTime
StartTimer = Now()
With wsTest
MaxRow = .UsedRange.Rows.Count
MaxCol = .UsedRange.Columns.Count
For i = 2 To MaxRow
.Cells(i, 4) = WorksheetFunction.SumIf(wsData.Range("G2:G108840"), .Cells(i, 1), wsData.Range("R2:R108840"))
Next i
End With
EndTimer = Now()
MsgBox (DateDiff("s", StartTimer, EndTimer))
End Sub
Run Code Online (Sandbox Code Playgroud)
这是第二种方法:执行时间在55秒时好一点
Sub Test2_Formula_and_Copy()
Dim MaxRow As Long, MaxCol As Long
Dim i As Long
Dim StartTimer, EndTimer, UsedTime
StartTimer = Now()
With wsTest
MaxRow …Run Code Online (Sandbox Code Playgroud) TL; DR:如何在添加或删除源列表中的项目时防止触发ActiveX ComboBox
请注意,我看过这篇文章,它不是一个相同的问题,或者它不能为我当前的项目提供可行的解决方案。
您可以通过创建ActiveX组合框并在工作表上的A1:A4,输出单元格B2中为其提供源列表范围来复制问题,然后添加以下代码:
Private Sub ComboBox1_Change()
MsgBox ("hello")
End Sub
Sub TestAddItem()
Range("A4").Insert xlDown
Range("A4").Value = "NewItem"
End Sub
Run Code Online (Sandbox Code Playgroud)
如果运行TestAddItem,则在转到“新建项目”行时,Change将触发组合框的事件。
我已经找到了解决方案,但是只能找到解决方法,建议添加一个布尔变量,该布尔变量检查是否在change事件中实际执行代码。这是我的示例中的样子:
Option Explicit
Public bMakeItHappen As Boolean
Private Sub ComboBox1_Change()
If bMakeItHappen Then
MsgBox ("hello")
End If
End Sub
Sub TestAddItem()
bMakeItHappen = False
Range("A4").Insert xlDown
Range("A4").Value = "NewItem"
End Sub
Run Code Online (Sandbox Code Playgroud)
如果更改组合框的目的地,则会发生相同的情况。从源范围手动添加或删除项目不会触发事件。
注意:Application.EnableEvents = False对ActiveX元素没有影响!他们仍然会开火(由Microsoft设计)
如何防止这种情况发生?就目前而言,此ActiveX元素不可用,或者至少在我需要在代码中到处设置布尔变量的情况下,至少不能使用它。
我在MS Access窗体对象中有以下代码.
Private Sub UpdatePMText(sLang As String)
'Used to pass both Mandate and Language Info to called Sub that will execute the queries
Dim iMandate As Integer
'Check if there is text in the box.
If Me.Controls("txtInput_PM_" & sLang & "_DRAFT") = Null Or Me.Controls("txtInput_PM_" & sLang & "_DRAFT") = "" Then
MsgBox ("There is no text in the " & sLang & " DRAFT Field." & vbNewLine & "The operation will not be executed.")
Exit Sub
End If
iMandate …Run Code Online (Sandbox Code Playgroud) 我一直在研究自行执行删除当前数据库文件的代码的方法.我在这里遇到了一个与Excel完全相同的代码片段,但这似乎并没有很好地转化为Access.
Sub KillMeExcel()
With ThisWorkbook
.Saved = True
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close False
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
似乎没有.ChangeFileAccessMode in Access,所以我没有比这更进一步.
是否可以使用VBA代码删除当前数据库?
vba ×8
excel ×7
excel-2010 ×4
excel-vba ×4
access-vba ×3
ms-access ×2
csv ×1
excel-2013 ×1
ms-word ×1
pdf ×1
word-vba ×1
xml ×1