Tag: vba

从文本文件中读取数据并进行分隔

我有一个Excel 2010电子表格,并且正在读取.txt文件(以及将来的另一个.xls文件)中的信息。 这个文本文件每行有3个元素; 姓,职称,每个元素用逗号隔开。 我有数据读取和粘贴到Excel中,但每行都粘贴到一个单元格。 我正在寻找将每个元素粘贴到不同的列。 我知道我应该尝试划分,但我不能弄清楚语法。 我的问题是如何分离每个元素,并将其粘贴到它自己的单元格? 我目前使用逗号来分隔我的.txt文件上的每个元素,但未来的文件可能使用制表符,全站,分号等。我如何扩展它,使所有的基地被覆盖? 下面是我的代码,在我的代码下是一个虚拟数据的样本 Sub FetchDataFromTextFile() Dim i As Long Dim LineText As String Open "C:\mytxtfile.txt" For Input As #24 i = 2 While Not EOF(24) Line Input #24, LineText ActiveSheet.Cells(i, 2).Value = LineText P = Split(Record, ",") i = i + 1 Wend Close #24 End Sub John,Doe,老板 […]

Excel VBA错误使用WScript.Shell.Run

最近从Excel 2010升级到Excel 2013后,我将一个自定义加载项(.xlam)移动到新的Application.LibraryPath目录(C:\ Program Files \ Microsoft Office 15 \ root \ office15 \ Library \ BTRTools)。 有一些代码启动一个可执行(exe)文件(位于加载项的子目录中)。 但是,由于升级/移动,我没有得到一个错误: PrettyPrintXml.exe – Application Error The application was unable to start correctly (0xc000007b). Click OK to close the application. 我显然相当确信这是文件权限。 我已经明确地将自己的权限添加到\ Library文件夹(和所有子文件夹)的完整权限。 请注意,即使使用Excel 2010(C:\ Program Files(x86)\ Microsoft Office \ Office14 \ Library中的文件夹),我也必须这样做才能使事情顺利进行。 但是,毕竟,我仍然卡住,无法启动exe文件。 任何想法/build议如何使这项工作? 代码很标准: Public Sub […]

如何编写一个控件来减lessVBA代码模块中的单元格值

我有一个代码模块,我创build一个文本框,按下特定的键,并减less插入文本框中的金额当前选定的单元格值。 我来到了创build文本框的地步。 现在我需要访问工作表模块外的文本框的事件。 我发现我可以用WihtEvents属性创build一个类模块。 不幸的是,这似乎并不奏效。 这里是执行的代码来进行控制: Dim objControl As BankingEventSink Private Sub ReduceCell() If IsNumeric(ActiveCell.Text) Then Dim value As Double value = CDbl(ActiveCell.Text) ActiveSheet.Shapes.AddOLEObject(ClassType:="Forms.TextBox.1").Name = "ReduceCellTextBox" With ActiveSheet.OLEObjects("ReduceCellTextBox") .Top = ActiveCell.Top + ActiveCell.Height .Left = ActiveCell.Left End With ActiveSheet.OLEObjects("ReduceCellTextBox").Activate Set objControl = New BankingEventSink objControl.Init (ActiveSheet.OLEObjects("ReduceCellTextBox").Object) Else RethrowKeys ("{BS}{-}") End If End Sub 类模块的代码: Dim […]

如何使用Excel .SaveAs但保留原始工作表名称

我正在使用Excel 2010,并有一个用户表单,它将支持各种处理选项(即按预定义的范围进行sorting,获取统计信息和可怕的'导出'(SaveAs)。我想允许用户导出其中一个表CSV或XLSX。 问题是,当我使用另存为保存为CSV,它将表格重命名为我select的文件名(减去扩展名)。 我已经search了几个小时,并没有find任何提供解决scheme的地方。 我确实find了一个Stack 5+年以前的文章,但是它没有解决scheme(请参阅如何在运行保存macros后停止重命名excelsheets ) 任何帮助,将不胜感激! 谢谢! 这里是代码: Dim ws As Excel.Worksheet Dim strSaveName As String Dim strThisName As String strThisName = ThisWorkbook.Path & ThisWorkbook.Name strSaveName = Application.GetSaveAsFilename( _ fileFilter:="Text Files (*.csv), *.csv") Set ws = Worksheets("Export") ws.SaveAs Filename:=strSaveName, FileFormat:=xlCSV 'I do the following TO UNDO THE RENAME <GROAN> (for now just saving […]

VBA Excel:获取多个单元格的结果

我试图根据预设if语句获得不同单元格的结果,我在多个消息框中接收到结果,并且根据第一个语句检查计算所有单元格的结果。 我怎样才能在一个单一的msgbox接收所有的结果,并允许函数检查范围内的每一个单元格? Dim rcell As Range For Each rcell In Vou_Summary.Range("I5:I16") If 0 < rcell <= 2.5 Then MsgBox rcell.Cells.Offset(0, -3).Value & " Is Critical", vbOKOnly, "Notice!" ElseIf 2.5 < rcell <= 4 Then MsgBox rcell.Cells.Offset(0, -3).Value & " Requires PR Placement", vbOKOnly, "Notice!" ElseIf rcell >= 7 Then MsgBox rcell.Cells.Offset(0, -3).Value & " Is […]

访问共享networking文件夹

我需要通过VBA访问networking文件服务器上托pipe的文件夹。 该文件夹只能通过服务帐户(不同于普通用户帐户)以书面forms进行访问,对此我有用户名和密码。 通过UI,我可以看到该文件夹​​并将其映射为本地驱动器,但为了以书面forms访问它,我需要从Windows注销并通过服务帐户login。 有没有办法在正常的用户会话期间访问networking文件夹,但在VBA代码中硬编码username和pwd? 我没有尝试映射文件夹作为本地驱动器: Set WshNetwork = CreateObject("WScript.Network") WshNetwork.MapNetworkDrive "S:", "\\corp-server\HostingFolder", False, Username, pwd 但没有工作(“S”驱动器没有映射)。 如果我做同样的事情,但不提供用户名和密码: Set WshNetwork = CreateObject("WScript.Network") WshNetwork.MapNetworkDrive "S:", "\\corp-server\HostingFolder" 它完美的作品。 想知道我现在想做的事实际上是可能的吗? 如果没有,有没有其他的select? 谢谢

在Windows Server 2012 R2上从VBA调用batch file时出现奇怪的FTP行为

我有一个基本的.bat文件,连接到FTP服务器,保存CSV文件列表,然后从FTP服务器下载所有的CSV文件。 我正在使用VBA调用shell来运行.bat文件。 在我的笔记本电脑(Windows 10)上,一切运行良好,但是如果我在Windows Server 2012 R2上运行它,.bat文件会卡住,因为FTP服务器出现错误: 425无法打开数据连接传输“/*.csv 我正在使用运行FileZilla服务器的PC来testing,而且我也可以访问我的客户端的FTP服务器(不知道它们在运行什么)。 这是我试过的: 在Windows 10和Windows Server 2012 R2 – 防火墙禁用,64位操作系统,Excel 2010 32位。 在Windows 10笔记本电脑上: 从命令提示符运行batch file正常工作 运行我的VBA代码使用的Windows运行窗口(Winkey + R)的命令string,工作正常 通过任务计划程序作为任务运行batch file,工作正常 运行调用shell来运行.bat文件的VBA子工作正常 在Windows Server 2012 R2服务器上: 从命令提示符运行batch file正常工作 运行我的VBA代码使用的Windows运行窗口(Winkey + R)的命令string,工作正常 通过任务计划程序作为任务运行batch file,工作正常 问题: 运行调用shell的VBA子文件来运行.bat文件,批处理会挂起。 看着FTP服务器,batch file完成login,然后显示错误425: (000046)9/21/2015 10:36:11 – test(10.32.0.75)> 150打开“/ .csv”目录列表的数据通道 (000046)2015/9/21 10:36:22 – test(10.32.0.75)> 425无法打开数据连接传输“/ […]

当运行VBA代码第二次“运行时错误462:远程服务器计算机不存在或不可用”

下面的代码在我第一次运行的时候工作的很好,但是当我需要再次运行时 ,它给了我这个错误: 运行时错误“462”:远程服务器计算机不存在或不可用 它不会一直发生,所以我想这与Word(不)在后台运行有关…? 我在这里错过了什么? Sub Docs() Sheets("examplesheet").Select Dim WordApp1 As Object Dim WordDoc1 As Object Set WordApp1 = CreateObject("Word.Application") WordApp1.Visible = True WordApp1.Activate Set WordDoc1 = WordApp1.Documents.Add Range("A1:C33").Copy WordApp1.Selection.PasteSpecial Link:=False, DataType:=wdPasteRTF, _ Placement:=wdInLine, DisplayAsIcon:=False Application.Wait (Now + TimeValue("0:00:02")) WordDoc1.PageSetup.TopMargin = CentimetersToPoints(1.4) WordDoc1.PageSetup.LeftMargin = CentimetersToPoints(1.5) WordDoc1.PageSetup.BottomMargin = CentimetersToPoints(1.5) ' Control if folder exists, if not […]

select多个页面时,在Excel中创build警告以防止意外覆盖单元格

我正在尝试编写一些Visual Basic代码,以防止任何人在select多个工作表时意外覆盖多个工作表中的单元格。 不过,我想要覆盖多个单元格的单元格的选项,应该在任何阶段都需要。 所以,当我select了多个工作表时,我想popup两个选项,如下所示:“您确定要覆盖您select的工作表上的单元吗? 确定取消 我觉得我几乎在下面的代码,但如果我有3张select,然后popup将出现3次(每页一次)。 当然,我只想让popup窗口出现一次,而不pipe我select了多less张。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If ActiveWindow.SelectedSheets.Count > 1 Then If MsgBox("Are you sure you want to overwrite the cells across the sheets you have selected?", vbOKCancel) = vbCancel Then Exit Sub Application.EnableEvents = False Application.Undo End If Application.EnableEvents = True End Sub […]

Excel VBA:如何添加包含逗号包含值的数据validation列表,而不使用Range的引用

我需要添加一个数据validation列表到less数值包含逗号的单元格。 我有这样的数据validation包括逗号字符相同的问题 但是我不能引用范围,因为我正在创build一个新的工作簿,并用数据validation列表提供它的单元格。 所以引用不适合我,因为一些值包含逗号,所以我不能将范围设置为string,并在Formula1后使用 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=myStr 另一个想法,我发现我可以用其他字符(虚拟字符)replace逗号,填充单元格后用逗号replace虚拟字符,但问题是如何用逗号replace虚拟字符? 另一种方法是重写Formula1,以便我可以使用虚拟字符作为分隔符,但我不知道如何实现这一点。 请提出任何解决scheme,我的最终目标是创build一个新的工作簿,并通过Excel VBA填充数据validation列表