预览模式: 普通 | 列表

Use VBA SaveAs in Excel 2007-2016

Use VBA SaveAs in Excel 2007-2016

Information

You see a lot of old SaveAs code that does not specify the FileFormat parameter. In Excel versions before Excel 2007, code without this parameter will not cause too many problems because Excel will use the current FileFormat of the existing file and the default FileFormat for new files is a (xls) in 97-2003 because there are no other Excel file formats before Excel 2007. 

But because there are so many new file formats in Excel 2007-2016, we shouldn't use code like this that does not specify the FileFormat parameter. In Excel 2007-2016, SaveAs requires you to provide both the FileFormat parameter and the correct file extension.

For example, in Excel 2007-2016, this will fail if the ActiveWorkbook is not an xlsm file
ActiveWorkbook.SaveAs "C:\ron.xlsm"

This code will always work
ActiveWorkbook.SaveAs "C:\ron.xlsm", fileformat:=52 
' 52 = xlOpenXMLWorkbookMacroEnabled = xlsm (with macro's in 2007-2016)


These are the main file formats in Excel 2007-2016, Note: In Excel for the Mac the values are +1

51 = xlOpenXMLWorkbook (without macro's in 2007-2013, xlsx)
52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2013, xlsm)
50 = xlExcel12 (Excel Binary Workbook in 2007-2013 with or without macro's, xlsb)
56 = xlExcel8 (97-2003 format in Excel 2007-2013, xls)

Note: I always use the FileFormat numbers instead of the defined constants in my code so that it will compile OK when I copy the code into an Excel 97-2003 workbook (For example, Excel 97-2003 won't know what the xlOpenXMLWorkbookMacroEnabled constant is).

Examples

Below are two basic code examples to copy the ActiveSheet to a new Workbook and save it in a format that matches the file extension of the parent workbook. The second example use GetSaveAsFilename to ask you for a file path/name. Example 1 you can use in Excel 97-2016 , Example 2 you can use in Excel 2000-2016.

If you run the code in Excel 2007-2016 it will look at the FileFormat of the parent workbook and save the new file in that format. Only if the parent workbook is an xlsm file and if there is no VBA code in the new workbook it will save the new file as xlsx. If the parent workbook is not an xlsx, xlsm or xls then it will be saved as xlsb.

If you always want to save in a certain format you can replace this part of the macro:

                 Select Case Sourcewb.FileFormat
                Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
                Case 52:
                    If .HasVBProject Then
                        FileExtStr = ".xlsm": FileFormatNum = 52
                    Else
                        FileExtStr = ".xlsx": FileFormatNum = 51
                    End If
                Case 56: FileExtStr = ".xls": FileFormatNum = 56
                Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
                End Select

With one of the one liners from this list

FileExtStr = ".xlsb": FileFormatNum = 50 
FileExtStr = ".xlsx": FileFormatNum = 51
FileExtStr = ".xlsm": FileFormatNum = 52


or maybe you want to save the one worksheet workbook to csv, txt or prn.
(you can use this also if you run the code in Excel 97-2003)

FileExtStr = ".csv": FileFormatNum = 6
FileExtStr = ".txt": FileFormatNum = -4158
FileExtStr = ".prn": FileFormatNum = 36

 

Examples

Sub Copy_ActiveSheet_1()
'Working in Excel 97-2016
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim Sourcewb As Workbook
    Dim Destwb As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    Set Sourcewb = ActiveWorkbook

    'Copy the sheet to a new workbook
    ActiveSheet.Copy
    Set Destwb = ActiveWorkbook

    'Determine the Excel version and file extension/format
    With Destwb
        If Val(Application.Version) < 12 Then
            'You use Excel 97-2003
            FileExtStr = ".xls": FileFormatNum = -4143
        Else
            'You use Excel 2007-2016
                Select Case Sourcewb.FileFormat
                Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
                Case 52:
                    If .HasVBProject Then
                        FileExtStr = ".xlsm": FileFormatNum = 52
                    Else
                        FileExtStr = ".xlsx": FileFormatNum = 51
                    End If
                Case 56: FileExtStr = ".xls": FileFormatNum = 56
                Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
                End Select
            End If
    End With

    '    'Change all cells in the worksheet to values if you want     '    With Destwb.Sheets(1).UsedRange     '        .Cells.Copy     '        .Cells.PasteSpecial xlPasteValues     '        .Cells(1).Select     '    End With     '    Application.CutCopyMode = False

    'Save the new workbook and close it
    TempFilePath = Application.DefaultFilePath & "\"
    TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "yyyy-mm-dd hh-mm-ss")

    With Destwb
        .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
        .Close SaveChanges:=False
    End With

    MsgBox "You can find the new file in " & TempFilePath

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub



Sub Copy_ActiveSheet_2()
'Working in Excel 2000-2016
    Dim fname As Variant
    Dim NewWb As Workbook
    Dim FileFormatValue As Long

    'Check the Excel version
    If Val(Application.Version) < 9 Then Exit Sub
    If Val(Application.Version) < 12 Then

        'Only choice in the "Save as type" dropdown is Excel files(xls)         'because the Excel version is 2000-2003
        fname = Application.GetSaveAsFilename(InitialFileName:="", _
        filefilter:="Excel Files (*.xls), *.xls", _
        Title:="This example copies the ActiveSheet to a new workbook")

        If fname <> False Then
            'Copy the ActiveSheet to new workbook
            ActiveSheet.Copy
            Set NewWb = ActiveWorkbook

            'We use the 2000-2003 format xlWorkbookNormal here to save as xls
            NewWb.SaveAs fname, FileFormat:=-4143, CreateBackup:=False
            NewWb.Close False
            Set NewWb = Nothing

        End If
    Else
        'Give the user the choice to save in 2000-2003 format or in one of the         'new formats. Use the "Save as type" dropdown to make a choice,Default =         'Excel Macro Enabled Workbook. You can add or remove formats to/from the list
        
        fname = Application.GetSaveAsFilename(InitialFileName:="", filefilter:= _
            " Excel Macro Free Workbook (*.xlsx), *.xlsx," & _
            " Excel Macro Enabled Workbook (*.xlsm), *.xlsm," & _
            " Excel 2000-2003 Workbook (*.xls), *.xls," & _
            " Excel Binary Workbook (*.xlsb), *.xlsb", _
            FilterIndex:=2, Title:="This example copies the ActiveSheet to a new workbook")
         'Find the correct FileFormat that match the choice in the "Save as type" list
        If fname <> False Then
            Select Case LCase(Right(fname, Len(fname) - InStrRev(fname, ".", , 1)))
            Case "xls": FileFormatValue = 56
            Case "xlsx": FileFormatValue = 51
            Case "xlsm": FileFormatValue = 52
            Case "xlsb": FileFormatValue = 50
            Case Else: FileFormatValue = 0
            End Select

            'Now we can create/Save the file with the xlFileFormat parameter             'value that match the file extension
            If FileFormatValue = 0 Then
                MsgBox "Sorry, unknown file extension"
            Else
                'Copies the ActiveSheet to new workbook
                ActiveSheet.Copy
                Set NewWb = ActiveWorkbook

                'Save the file in the format you choose in the "Save as type" dropdown
                NewWb.SaveAs fname, FileFormat:= _
                             FileFormatValue, CreateBackup:=False
                NewWb.Close False
                Set NewWb = Nothing

            End If
        End If
    End If
End Sub

 

分类:ASP | 固定链接 | 评论: 9 | 引用: 0 | 查看次数: 801
可能出现的错误提示有:
1、430 Class does not support Automation or does not support expected interface
  运行时错误"430": 类不支持自动化或不支持所需的接口
2、Error 13 - Type mismatch
问题产生原环境:

查看更多...

分类:其它文章 | 固定链接 | 评论: 3 | 引用: 0 | 查看次数: 1425

 Teleport Pro 是款优秀的网站离线浏览工具(即网站整站下载工具),Teleport Ultra是其增强版,但使用此系列软件下载的离线网页里会包含大量冗余代码(如tppabs),手动去修改工作量很大,下面介绍如何通过软件进行正则表达式批量替换冗余代码(推荐DreamWeaver的正则替换功能)。

 

清除tppabs标签:

html文件中:

查找:\btppabs="h[^"]*"

替换:(空)

css文件中的图片链接(以gif图片为例):

查找:tpa=http://[^\s]*.gif

替换:(空)

css文件中的注释:

查找:/\*tpa.*?\*/

替换:(空)

 

修复confirm链接:

查找:href=" *javascript:if\(confirm\('(htt[^"\s]*).*?"

替换:href="$1"

冗余代码示例:href="javascript:if(confirm('http://www.abcd9.com/  \n\n该文件无法用 Teleport Ultra 下载, 因为 不可用, 或放弃了下载, 或项目即将停止。  \n\n你想在服务器上打开它?'))window.location='http://www.abcd9.com/'"

示例替换后结果:href=http://www.abcd9.com/

分类:ASP | 固定链接 | 评论: 1 | 引用: 0 | 查看次数: 1823

SQL添加表字段

 通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数

增加字段: alter table [表名] add 字段名 smallint default 0 增加数字字段,整型,缺省值为0 
alter table [表名] add 字段名 int default 0 增加数字字段,长整型,缺省值为0
alter table [表名] add 字段名 single default 0 增加数字字段,单精度型,缺省值为0 
alter table [表名] add 字段名 double default 0 增加数字字段,双精度型,缺省值为0
alter table [表名] add 字段名 Tinyint default 0 增加数字字段,字节型,缺省值为0
 
alter table [表名] add 字段名 text [null] 增加备注型字段,[null]可选参数
alter table [表名] add 字段名 memo [null] 增加备注型字段,[null]可选参数
 
alter table [表名] add 字段名 varchar(N) [null] 增加变长文本型字段 大小 为N(1~255)
alter table [表名] add 字段名 char [null] 增加定长文本型字段 大小固定为255
 
alter table [表名] add 字段名 Datetime default 函数 增加日期型字段,其中 函数 可以是 now(),date()等,表示缺省值
(上面都是最常用的,还有其他的属性,可以参考下面的数据类型描述)
 
删除字段: alter table [表名] drop 字段名
 
修改变长文本型字段的大小:alter table [表名] alter 字段名 varchar(N)
 
删除表: drop table [表名]
分类:ASP | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1710

Microsoft HTML Object Library

HTML 对象库

    获取网页数据必须使用HTML对象库,可在“引用”窗体中添加对“Microsoft HTML Object Library”的引用。HTML对象库提供了大量的对象,这些对象和各类HTML标记相对应,如熟悉的“<a>”、“<Table>”、“< body>”和“<form>”标记,一些常用HTML对象的知识点如下所述:
 
(1)HTMLAnchorElement对象:该对象代表网页中超级链接(即“<a>”)标记,其常用属性和方法如下所述:
  href:该属性用于设置链接的目标。
  id:该属性用于设置链接的标识。
  innerHTML:该属性返回链接的HTML代码。
  innerText:该属性返回链接的文字。
  target:该属性用于设置链接的方式。
  click:该方法可模拟单击链接。

(2)HTMLBody对象:该对象代表网页中正文(即“<body>”)标记,其常用属性和方法如下所述:
  background:该属性返回网页的背景图片。
  bgColor:该属性返回网页的背景色。
  innerText:该属性返回网页包含的所有文字。

(3)HTMLDocument对象:该对象包含网页的整体,如所有的链接、表格对象等,其常用属性和方法如下所述:
  anchors:该属性返回网页包含的所有链接对象。
  applets:该属性返回网页包含的Applet插件对象。
  body:该属性返回网页的正文对象。
  forms:该属性返回网页包含的所有表单对象。
  frames:该属性返回网页包含的所有框架对象。
  images:该属性返回网页包含的所有图片对象。
  scripts:该属性返回网页包含的所有脚本对象。

(4)HTMLElementCollection对象:该对象可获取各类HTML对象的集合,如网页的表格或表单的集合,随后即可遍历该集合来选择所需的对象,其常用属性和方法如下所述:
  length:该属性返回集合的成员数。
  item:该属性返回集合中的指定成员。

(5)HTMLTable对象:该对象可获取HTML表格对象,也是获取网页信息的核心,其常用属性和方法如下所述:
  cols:该属性返回表格的列数。
  rows:该属性返回表格的行集合对象。
  deleteRow:该方法用于删除表格行。
  insertRow:该方法用于删除表格列。

(6)HTMLTableCell对象:该对象可获取HTML表格中的单元格对象(即“<TD>”标记中包含的内容),在控制表格对象后,需结合该对象来进一步获取所需的网页文字,其常用属性和方法如下所述:
  cellIndex:该属性返回单元格的编号。
  className:该属性返回单元格的类名。
  colSpan:该属性返回单元格的列合并数。
  innerHTML:该属性返回单元格的HTML代码。
  innerText:该属性返回单元格包含的文字。
  rowSpan:该属性返回单元格的行合并数。
  vAlign:该属性返回单元格的垂直对齐方式。

(7)HTMLTableCol对象:该对象可获取HTML表格中的列对象,其常用属性和方法如下所述:
  innerText:该属性返回表格列包含的文字。
  span:该属性返回表格列的合并数。

(8)HTMLTableRow对象:该对象可获取HTML表格中的行对象(即“<TR>”标记中包含的内容),在控制表格对象后,需遍历表格行并在此基础上访问特定单元格对象来获取所需的网页文字。该对象的常用属性和方法如下所述:
  cells:该属性返回行包含的单元格集合对象。
  rowIndex:该属性返回行的编号。
  vAlign:该属性返回行的垂直对齐方式。

(9)BSTR   

 
 
 
分类:其它文章 | 固定链接 | 评论: 2 | 引用: 0 | 查看次数: 1771
   windows2003当服务器。昨天突然发现网站上不去了。赶去网络间发现服务器能ping通网关,也能ping通其他电脑。还能上网,但是别的电脑就不能ping通我们的服务器。重启了一下服务器,发现“Generic host process for win32 services遇到问题需要关..”啥的。时间早上8:00.没理它。因为问题解决了。电脑可以我们的网站了。觉得问题很奇怪。。。过了1个小时,再访问我们的网站,发现又不能浏览了。同样不能ping通我们的服务器。看来,服务器的不工作不是偶然。

   下楼,重启电脑,同样发现了以前没有的“Generic host process for win32 services遇到问题需要关闭..”的提示。时间应该在重启电脑后50分钟左右。而且服务器仍然可以上网,可以ping通网关。我查看了事件查看器下面的应用程序的日志,发现出现“Generic host process for win32 services遇到问题需要关..”提示的时间,和一个错误的时间吻合。而且这个错误以前没见过的(因为每天都一堆一堆的错误,好在服务器还运行呢)。
事件类型:    信息
事件来源:    Application Error

查看更多...

分类:服务器 | 固定链接 | 评论: 451 | 引用: 0 | 查看次数: 7570
嵌入式数据库Sqlite3 Linux(CentOS)环境编译、使用介绍

环境:X86 PC、CentOS

编译安装步骤:

查看更多...

分类:服务器 | 固定链接 | 评论: 346 | 引用: 0 | 查看次数: 9711

NGINX 反向代理服务器配置(亲测)

 wget -c http://nginx.org/packages/centos/5/noarch/RPMS/nginx-release-centos-5-0.el5.ngx.noarch.rpm

rpm -ivh nginx-release-centos-5-0.el5.ngx.noarch.rpm

ulimit -HSn 65536

yum -y install nginx

cd /home #进入目录

mkdir -p /home/proxy_temp_dir #proxy_temp_dir与proxy_cache_dir这两个文件夹必须在同一个分区

mkdir -p /home/proxy_cache_dir #proxy_cache_dir与proxy_temp_dir这两个文件夹必须在同一个分区

chown nginx.nginx -R proxy_cache_dir proxy_temp_dir #设置目录所有者

chmod -R 777 proxy_cache_dir proxy_temp_dir #设置目录权限

备份原来的配置文件

cd /etc/nginx

mv nginx.conf  nginx.conf.bak

mv conf.d/default.conf  conf.d/default.conf.bak

下面是我配置的配置文件 nginx.conf

user nginx nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;

sendfile on;
tcp_nopush on;
server_tokens off;
keepalive_timeout 60;
tcp_nodelay on;
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path /home/proxy_temp_dir;
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天清理一次缓存,硬盘缓存空间大小为10GB。
proxy_cache_path /home/proxy_cache_dir levels=1:2 keys_zone=NAME:64m inactive=1d max_size=10g;
include /etc/nginx/conf.d/*.conf;
}

默认配置文件 conf.d/default.conf

这个文件是禁止未绑定的域名或IP访问

server {
listen 80 default;
server_name _;
return 500;
access_log off;
}

下面是网站反向代理配置文件 conf.d/blog.conf

server {
listen 80;
server_name blog.com; #网站域名
location / {
proxy_pass http://www.google.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache NAME;#使用NAME这个keys_zone
proxy_cache_valid 200 302 1h;#200和302状态码保存1小时
proxy_cache_valid 301 1d;#301状态码保存一天
proxy_cache_valid any 1m;#其它的保存一分钟
}
}

 

多个网站可以复制多个conf.d/blog.conf 修改相应网址就行 配置完所有.重启NGINX

server nginx restart

然后观察缓存目录

tree /home/proxy_cache_dir

分类:CentOS | 固定链接 | 评论: 398 | 引用: 0 | 查看次数: 10629

破解WinRAR5.0许可

 1.创建一个记事本,把下面的内容粘贴到记事本中,然后重新命名为rarreg.key,必须在重命名的时候,记事本的后缀名是可显示的。


RAR registration data
State Grid Corporation Of China
50000 PC usage license
UID=5827a0bd1c43525d0a5d
64122122500a5d3d56f784f3a440ac3fb632d34e08bbaa37fc7712
6acaeb8eb044810272e86042cb7c79b1da0eaf88c79f8a7c6dd77b
dba335e27a109997ac90fb0e10e4129e79f46c42b4ee1832fa5113
7443fcc1124840d4dd36f3af84a5c915a760b18c6394f938168227
fbf29edbc4b34ef85ee53fbfca71814a82afadf073876b4b033451
b6292a7cc7975b3ff3cc73404abbf7c126787344169eeae4609f62
c9ffbc159bf2640ad5d9b88f8fa9d9cbf2b7e5b022a21938465244

2.然后把rarreg.key文件复制或者剪切到WinRAR的安装目录,如果是64位的默认安装目录在C:\Program Files\WinRAR;如果是32位的默认安装目录在C:\Program Files(x86)\WinRAR。

3.重新打开WinRAR,在帮助,关于WinRAR就可以看到。
破解WinRAR5.0许可
分类:其它文章 | 固定链接 | 评论: 16 | 引用: 0 | 查看次数: 2448

 虽然人们都说wpa的密码难破解,其实,嗯,确实是这样子,不仅仅靠技术,还要靠运气,这里就要用到一个强大的字典咯,木有一个好字典,破解密码灰常困难的说。好了,不卖关子了,说方法:

1.打开BT5的Wicd network manager,在application下的internet中。选择一个新号较好的AP(那样子用起来才爽嘛)。然后看它的properties,打开properties以后继续打开里面的属性看看这个AP的mac地址跟channel。

2.ifconfig看看自己的无线网卡的名称,一般是wlan0或者wifi0,后文中根据实际情况执行命令。

3.开启无线监控

airmon-ng start wlan0 6

注:wlan0为你的无线设备名称  6为你要开启的信道(但是这里的6其实并没有那么重要的说)

这一步你可能会看到提示有XXXX XXXX进程影响,没关系,kill XXX XXX    XXX为给出的进程号,然后重新执行上句直到不报错

4.因为我们已经选择好了目标,我们就直奔目标AP,开始用BT5对其进行监控

airodump-ng -w nenew -c 4 --bssid AP‘s MAC mon0

这时候你应该可以看到如下图示:

1

5.根据上图,我们可以找到四个Client客户端的MAC地址,从里面随便选个(最好选择活跃点儿的)。打开一个新的终端,上一个终端不要关闭,后面还需要用到。在新终端中输入:
aireplay-ng -0 10 -a AP’s MAC -c CP’s MAC mon0

执行一次看第一个终端中是否出现了下图所示的标志WAP Handshake 。如果出现了,那么恭喜,你离成功已经不远了。如果没有出现就继续重复5的命令就ok了,直到出现握手。

6.对BT5握手抓到的包进行破解工作

aircrack-ng -w password.txt -b AP’s MAC nenew.cap

其中的password.txt为我们需要预置的字典文件,字典文件网上很多,搜搜就有了。奶牛也会放出自己的一些字典文件提供下载,继续关注咯。最后上成果图

本文只做技术讨论,不要用于非法用途,否则后果自负。

原文出自:http://blog.csdn.net/aniven/article/details/6748070

分类:网络安全 | 固定链接 | 评论: 1 | 引用: 0 | 查看次数: 2047