怎么样让Excel在打开时就自动执行编好的宏代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么样让Excel在打开时就自动执行编好的宏代码?相关的知识,希望对你有一定的参考价值。

其实意思很简单,我有很多份的Excel表格数据需要处理,每份表格中数据的格式是一样的,但它们各有不同的使用条件,故不能粘在一张表里处理,当然处理公式是一样的。现在我用很多公式和算法对其中一个表格进行了数据的处理,但是表格很多,我总不能每一个表格都费这么大的功夫去手动处理吧?所以我在处理第一张表格时录制了宏,我也知道只要对之后的每一张表格都执行这个宏就行了,但是因为我是要做一个功能,希望能够在打开一个新的表格时就能自己读取我事先写好并保存在某地的宏,然后执行这个宏并处理数据,而不是我手动把宏代码粘贴进去,请问我要怎么做?应该在录制的代码上加上什么语句,把代码存在哪里之类的。
之前网上搜了很多,但都不是很懂,有说要用类模块,workbook什么的,但我的宏基础很差,完全不知道在说什么,在哪里保存什么的。。。希望您回答时能够提供详细的哪怕是最基本的步骤,就只有这么多分了,谢谢。
对了。我用的是Excel2010,
对了,我要求的是打开一个新的表格时也能执行,而不是每次打开之前那份Excel时才能执行

首先进入VBA编辑器(ALT+F11进入、或者ALT+F8选宏再点编辑),然后再打开工程资源管理器(菜单查看下选中、或者直接按CTRL+R键),在资源管理器里面的ThisWorkBook上双击鼠标,会打开工作的相关代码,粘贴下面的例子代码:

Private Sub Workbook_open()
    msgbox "工作表打开了"
    \'call 其它宏,或者继续写其它语句
End Sub

 这样每次打开工作簿就会执行Workbook_open宏的代码。

参考技术A 你把录制好的宏,放在一个WorkBook的open事件中,然后把这个文件保存为XLA类型。再打开Excel,在文件、选项、加载项中添加这个xla。以后你双击你的Excel文件时,这个xla就能自动执行了 参考技术B 首先你需要把宏代码放在workbook的open事件中,这样才能在打开时自动执行。其次,由于你的宏代码只能执行当前工作表的动作,所以你需要编写类似于For 循环语句来遍历你所有的工作表。 参考技术C Private Sub Workbook_open()
【功能代码】
End Sub

或者

Private Sub Workbook_open()
Call【代码名】
End Sub

Workbook_open事件代码为工作簿代码,一定要放在Thisworkbook模块内,否则不会自动运行。追问

你好,谢谢你的回答。

我没有任何基础,别见笑,什么叫thisworkbook。。。是这个当前工作簿吗

追答

双击红色圈中的名称,将代码粘贴在右边弹出的代码窗口中。

追问

请问可以再详细一点吗,具体说说步骤,不要嫌我烦哈

现在有录制好的代码了,然后我怎么样?

点开宏:

宏名还有下面的位置选什么?

点了thisworkbook后是这样的,

然后直接这么写吗

再然后怎么保存,是不是要改成xlsm后缀,还有这样真的可以对所有新打开的文件都成立吗,不会像三楼说的那样用什么for语句?

追答

打开我的附件看看,功能代码放在模块1中!


功能代码的功能是在A1单元格输入100。

本回答被提问者和网友采纳

位置服务关闭时,Windows 8 手机应用程序在打开时崩溃

【中文标题】位置服务关闭时,Windows 8 手机应用程序在打开时崩溃【英文标题】:Windows 8 phone app crashes on open when location services are off 【发布时间】:2014-07-09 08:43:06 【问题描述】:

我有一个天气应用程序,它以纬度和经度获取用户的位置,然后使用 api 来返回结果。关闭位置服务后,应用程序会在打开时崩溃,并且不会提供任何错误帮助以查看错误所在。有没有办法编写一个 if 语句来查看位置服务是否是一个?我应该怎么做才能防止这个问题?

代码如下:

 async private void GetLocation()
        
            var geolocator = new Geolocator();
            if (geolocator.LocationStatus == PositionStatus.Disabled)
            
                //MessageBox.Show("We need your current location for the app to function properly, please set location services on in settings");
                MessageBoxResult mRes = MessageBox.Show("We need your current location for the app to function properly, please set location services on in settings", "I understand", MessageBoxButton.OKCancel);
                if (mRes == MessageBoxResult.OK)
                
                    Application.Current.Terminate();
                
                if (mRes == MessageBoxResult.Cancel)
                
                    Application.Current.Terminate();
                
            

            Geoposition position = await geolocator.GetGeopositionAsync();
            Geocoordinate coordinate = position.Coordinate;
            latitude = Convert.ToString(Math.Round(coordinate.Latitude, 2));
            longitude = Convert.ToString(Math.Round(coordinate.Longitude, 2));

            URL = "http://api.openweathermap.org/data/2.5/weather?lat=" + latitude + "&lon=" + longitude + "&units=metric";

            Client(URL);
        

public void Client(string uri)
        
            var clientToken = new WebClient();
            clientToken.OpenReadCompleted += clientToken_OpenReadCompleted;
            clientToken.OpenReadAsync(new Uri(uri));
        

感谢您的帮助:)

【问题讨论】:

【参考方案1】:

要确定错误发生的位置,请检查 Microsoft 从 Windows 开发中心记录的错误堆栈跟踪 - https://dev.windowsphone.com/en-US/CrashReport(上图的“导出过去 30 天的顶部堆栈跟踪”链接)。

堆栈跟踪显示可能会有延迟。 BugSense 是一个非常有用的工具,可以为您提供出色的错误报告以帮助调试。只需一行代码即可在您的应用中启动并运行以捕获未处理的异常。

使用 BugSense,您还可以添加“面包屑”,将其添加到错误报告中。然后,您可以检查自己打开的位置服务,并添加此信息以帮助您从异常堆栈跟踪中找出问题。

【讨论】:

【参考方案2】:

问题是当 Location 被关闭时,它会抛出一个你没有在 try/catch 块中处理的异常。这里是来自MSDN 的示例代码来正确处理这个问题:

private async void OneShotLocation_Click(object sender, RoutedEventArgs e)


    if ((bool)IsolatedStorageSettings.ApplicationSettings["LocationConsent"] != true)
    
        // The user has opted out of Location.
        return;
    

    Geolocator geolocator = new Geolocator();
    geolocator.DesiredAccuracyInMeters = 50;

    try
    
        Geoposition geoposition = await geolocator.GetGeopositionAsync(
            maximumAge: TimeSpan.FromMinutes(5),
            timeout: TimeSpan.FromSeconds(10)
            );

        LatitudeTextBlock.Text = geoposition.Coordinate.Latitude.ToString("0.00");
        LongitudeTextBlock.Text = geoposition.Coordinate.Longitude.ToString("0.00");
    
    catch (Exception ex)
    
        if ((uint)ex.HResult == 0x80004004)
        
            // the application does not have the right capability or the location master   switch is off
            StatusTextBlock.Text = "location  is disabled in phone settings.";
        
        //else
        
            // something else happened acquring the location
        
    

您应该访问Source MSDN 文章并阅读它以更好地理解。此示例位于第 7 步。

【讨论】:

以上是关于怎么样让Excel在打开时就自动执行编好的宏代码?的主要内容,如果未能解决你的问题,请参考以下文章

在excel的宏里面 “向下移动一行” 如何写

mysql问题处理记录

Excel在单元格按回车触发宏问题

SQL Server2008打开时遇到的问题:“请验证实例名称是不是正确并且SQL Server已配置为允许远程连接”。

xml格式用excel打开提示啊支持程序打开

如何在excel2007中实现宏的快捷键